let shadows, graphicLayer

// 日照分析
export function ininShadows(viewer = window.viewer, onChange) {
    if (!graphicLayer) {
        graphicLayer = new mars3d.layer.GraphicLayer()
        viewer.addLayer(graphicLayer)
    }
    if (!shadows) {
        shadows = new mars3d.thing.Shadows({
            multiplier: 1600
        })
        viewer.addThing(shadows)
        if (onChange) {
            shadows.on(mars3d.EventType.change, function () {
                const shadowTime = shadows.time
                onChange(shadowTime)
            })
        }
    }
    return shadows
}

export function setShadows(date) {
    shadows.time = date
}


export function stopPlay() {
    if (shadows && shadows.isStart) {
        shadows.pause()
    }
}

/**
 * 开始播放
 *
 * @export
 * @param {*} date 年月日
 * @param {number} hours 小时
 * @param {number} minutes 分钟
 */
export function startPlay(currentTime) {
    const {
        startDate,
        endDate
    } = getStartAndEndTime(currentTime)
    shadows.start(startDate, endDate, currentTime)
}

// 通过 距离零点的秒数 获取 时分秒
export function getDateBySeconds(seconds) {
    const second = Math.floor(seconds % 60);
    const hours = Math.floor(seconds / 3600);
    const minutes = Math.floor(seconds / 60) % 60;
    return {
        hours,
        minutes,
        second
    }
}

// 获取日期字符串
// 入参 fmt-格式 date-日期
export function dateFormat(date = new Date(), fmt = "YYYY-mm-dd HH:MM:SS") {
    let ret;
    const opt = {
        "Y+": date.getFullYear().toString(), // 年
        "m+": (date.getMonth() + 1).toString(), // 月
        "d+": date.getDate().toString(), // 日
        "H+": date.getHours().toString(), // 时
        "M+": date.getMinutes().toString(), // 分
        "S+": date.getSeconds().toString() // 秒
    };
    for (let k in opt) {
        ret = new RegExp("(" + k + ")").exec(fmt);
        if (ret) {
            fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
        };
    };
    return fmt;
}


// 获取当日的 0时 与 23时59分59秒
export function getStartAndEndTime(currentTime) {
    return {
        startDate: new Date(new Date(currentTime.toLocaleDateString()).getTime()),
        endDate: new Date(new Date(new Date().toLocaleDateString()).getTime() + 24 * 60 * 60 * 1000 - 1)
    }
}